# 单例模式
class Singleton(object):
    __instance = None
    __isFirstInit = True
    # 理解__new__是创建对象的
    def __new__(cls, *args, **kwargs):
        # if not cls.__instance:
        #     cls.__instance = super().__new__(cls, *args, **kwargs)
        # return cls.__instance
        if cls.__isFirstInit:
            cls.__instance = super().__new__(cls, *args, **kwargs)
            cls.__isFirstInit = False
        return cls.__instance = super().__new__(cls, *args, **kwargs)


    # 理解__init__是初始化对象，为对象绑定属性的
    def __init__(self, *args, **kwargs):
        self.name = "Will"
        self.age = 23

    def __str__(self):
        return f"Singleton({self.name},{self.age})"


s1 = Singleton()
s2 = Singleton()
print(s1, s2)
# Singleton(Will,23) Singleton(Will,23)
print(id(s1), id(s2))
# 1823388319984 1823388319984
s2.name = "Smith"
print(s1, s2)
# Singleton(Smith,23) Singleton(Smith,23)
